# 一共有7个代码文件，每个文件对应一个最能体现的原则，请找出每个原则对应的代码文件，然后分析该代码文件是如何体现该原则的。

# 请将文件名修改为相应的原则名称，如：1.单一职责原则.py。并回答以下问题。然后将代码文件上传到之前实验创建的码云仓库中。
# 将码云代码仓库里新建文件夹code_snippets，将代码文件放入该文件夹中。

# 1.运行代码
# 输出如下：
# 用户 Alice 借阅了图书 B1001。
# 用户 Alice 归还了图书 B1001。
# VIP用户 Bob 借阅了图书 B2002，并享有额外的借阅特权。
# 用户 Bob 归还了图书 B2002。
# VIP用户 Bob 进入了VIP休息区。

# 2. 指出该代码体现了哪个原则
# 体现了开闭原则原则

# 3. 请说明该代码是如何体现该原则
# 代码中的 VIPUser 类通过继承 User 类并添加新的方法来扩展功能，而不需要修改 User 类或 LibraryManagementSystem 类的代码。这样，当引入新的用户类型或功能时，只需添加新的子类或方法，而不影响现有的系统，符合开闭原则。

# 基类：User，定义普通用户的基本行为
class User:
    def __init__(self, user_id, name):
        self.user_id = user_id
        self.name = name

    def borrow_book(self, book_id):
        print(f"用户 {self.name} 借阅了图书 {book_id}。")

    def return_book(self, book_id):
        print(f"用户 {self.name} 归还了图书 {book_id}。")

# 子类：VIPUser，继承自User类，并扩展了一些额外的功能
class VIPUser(User):
    def borrow_book(self, book_id):
        # VIP用户借书时，享受额外的折扣或特权
        print(f"VIP用户 {self.name} 借阅了图书 {book_id}，并享有额外的借阅特权。")

    def access_vip_lounge(self):
        # VIP用户有额外的功能，例如访问VIP休息区
        print(f"VIP用户 {self.name} 进入了VIP休息区。")

# 图书管理系统类，处理借书和还书逻辑
class LibraryManagementSystem:
    def process_borrow(self, user: User, book_id):
        user.borrow_book(book_id)

    def process_return(self, user: User, book_id):
        user.return_book(book_id)

# 测试示例
if __name__ == "__main__":
    # 创建普通用户
    regular_user = User(user_id=101, name="Alice")
    
    # 创建VIP用户
    vip_user = VIPUser(user_id=201, name="Bob")

    # 图书管理系统
    library_system = LibraryManagementSystem()

    # 普通用户借书还书
    library_system.process_borrow(regular_user, "B1001")
    library_system.process_return(regular_user, "B1001")

    # VIP用户借书还书
    library_system.process_borrow(vip_user, "B2002")
    library_system.process_return(vip_user, "B2002")

    # VIP用户访问VIP休息区
    vip_user.access_vip_lounge()
